Page({
  data: {
    activeStatus: 'all',       // 当前选中的状态筛选（全部/未开始/进行中/已完成）
    taskList: [],              // 全部任务列表
    filteredTasks: [],         // 筛选后的任务列表
    isLoading: true,           // 加载状态标志
    errorMsg: '',              // 错误信息
    showModal: false,          // 控制模态框显示/隐藏
    currentTask: {},           // 当前选中的任务详情
  },

  // 页面加载时执行，获取任务列表
  onLoad: function() {
    this.fetchTaskList();
  },

  // 从后端获取任务列表
  fetchTaskList: function() {
    this.setData({ isLoading: true });
    
    wx.request({
      url: 'http://localhost:8080/api/wechat/with-collections',
      method: 'GET',
      header: {
        'content-type': 'application/json',
        'Authorization': `Bearer ${wx.getStorageSync('token')}`
      },
      success: (res) => {
        if (res.data.code === 200 && res.data.data) {
          // 处理后端返回的数据
          const processedTasks = this.processTaskData(res.data.data);
          this.setData({
            taskList: processedTasks,
            errorMsg: ''
          });
          this.filterTasks(); // 筛选任务
        } else {
          // 处理请求失败情况
          this.setData({
            errorMsg: res.data.message || `请求失败: ${res.statusCode}`
          });
          wx.showToast({
            title: '获取任务失败',
            icon: 'none'
          });
        }
      },
      fail: (err) => {
        // 处理网络错误
        this.setData({
          errorMsg: err.errMsg || '网络请求失败'
        });
        wx.showToast({
          title: '网络错误，请重试',
          icon: 'none'
        });
      },
      complete: () => {
        // 无论成功或失败，都结束加载状态
        this.setData({ isLoading: false });
      }
    });
  },

  // 处理后端返回的任务数据，计算任务状态和进度
  processTaskData: function(tasks) {
    return tasks.map(task => {
      // 处理警官信息，将警官数组转换为以顿号分隔的字符串
      const officers = task.officers.flat().map(o => o.name);
      
      // 计算巡逻点完成情况
      const patrolCollections = task.patrolPointCollections || [];
      const totalPatrols = patrolCollections.length;
      let completedPatrols = 0;
      let totalPoints = 0;
      let completedPoints = 0;
      
      // 遍历每个巡逻点，计算完成情况
      patrolCollections.forEach(collection => {
        const points = collection.patrolPoints || [];
        totalPoints += points.length;
        
        // 检查该巡逻点是否全部完成
        const collectionCompleted = points.every(p => p.status === 1);
        if (collectionCompleted) {
          completedPatrols++;
          completedPoints += points.length;
        } else {
          // 累加已完成的签到点
          completedPoints += points.filter(p => p.status === 1).length;
        }
      });
      
      // 计算任务进度百分比
      const progress = totalPoints > 0 ? Math.round((completedPoints / totalPoints) * 100) : 0;
      
      // 根据进度百分比确定任务状态
      let status = 'pending'; // 默认未开始
      if (progress === 0) {
        status = 'pending'; // 未开始
      } else if (progress === 100) {
        status = 'done'; // 已完成
      } else {
        status = 'doing'; // 进行中
      }
      
      // 初始化巡逻点折叠状态（默认收起）
      const patrolsWithStatus = patrolCollections.map(p => ({
        ...p,
        isExpanded: false
      }));
      
      return {
        ...task,
        status,
        progress,
        officerNames: officers.join('、'),
        totalPatrols,
        completedPatrols,
        patrolPointCollections: patrolsWithStatus
      };
    });
  },

  // 根据状态筛选任务
  filterTasks: function() {
    const { activeStatus, taskList } = this.data;
    let filtered = [];
    
    // 根据当前选中的状态进行筛选
    if (activeStatus === 'all') {
      filtered = [...taskList]; // 全部任务
    } else if (activeStatus === 'pending') {
      filtered = taskList.filter(task => task.status === 'pending'); // 未开始任务
    } else if (activeStatus === 'doing') {
      filtered = taskList.filter(task => task.status === 'doing'); // 进行中任务
    } else if (activeStatus === 'done') {
      filtered = taskList.filter(task => task.status === 'done'); // 已完成任务
    }
    
    this.setData({
      filteredTasks: filtered
    });
  },

  // 切换任务状态筛选
  onStatusChange: function(e) {
    const status = e.currentTarget.dataset.status;
    this.setData({
      activeStatus: status
    });
    this.filterTasks(); // 重新筛选任务
  },

  // 刷新任务列表
  refreshTasks: function() {
    this.fetchTaskList();
  },

  // 显示任务详情模态框
  showTaskDetail: function(e) {
    const index = e.currentTarget.dataset.index;
    this.setData({
      showModal: true,
      currentTask: this.data.filteredTasks[index]
    });
  },

  // 隐藏模态框（仅通过关闭按钮调用）
  hideModal: function() {
    this.setData({
      showModal: false,
      currentTask: {}
    });
  },

  // 切换巡逻点折叠状态
  togglePatrolFolder: function(e) {
    const patrolIndex = e.currentTarget.dataset.index;
    const { currentTask } = this.data;
    const patrols = [...currentTask.patrolPointCollections];
    
    // 切换指定巡逻点的折叠状态
    patrols[patrolIndex].isExpanded = !patrols[patrolIndex].isExpanded;
    
    this.setData({
      currentTask: {
        ...currentTask,
        patrolPointCollections: patrols
      }
    });
  },

  // 判断巡逻点是否完成（所有签到点都已完成）
  isPatrolCompleted: function(patrol) {
    return patrol.patrolPoints.every(p => p.status === 1);
  },

  // 格式化时间（将ISO格式时间转换为YYYY-MM-DD HH:MM格式）
  formatTime: function(timeStr) {
    if (!timeStr) return '';
    const date = new Date(timeStr);
    return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')} ${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}`;
  },

  // 获取任务状态文本
  getStatusText: function(task) {
    switch(task.status) {
      case 'pending': return '未开始';
      case 'doing': return '进行中';
      case 'done': return '已完成';
      default: return '未知';
    }
  },

  // 获取任务状态徽章样式
  getStatusBadgeClass: function(task) {
    switch(task.status) {
      case 'pending': return 'badge-pending';
      case 'doing': return 'badge-doing';
      case 'done': return 'badge-done';
      default: return '';
    }
  }
});